package main

import (
	"fmt"
)

// 一个数字两个数相加
func main() {
	arr := []int{3, 3, 3}

	result := twoSum(arr, 6)
	fmt.Println(result)

}

// 要分两次循环赋值，还要考虑重复的问题，因为map本生会
func twoSum(nums []int, target int) []int {
	var result []int
	m := make(map[int]int)
	for i, v := range nums { // 有重复数据也不怕了，只要排除自己就行
		m[v] = i
	}

	for i, v := range nums {
		val, ok := m[target-v]
		if ok && i != val {
			result = append(result, i, val)
		}
	}
	return result
}

//func twoSum(arr []int, target int) []int{
//	for i := 0; i < len(arr); i++ {
//		for j := i + 1; j < len(arr); j++ {
//			if (arr)[i]+(arr)[j] == target {
//				return []int{i,j}
//			}
//		}
//	}
//	return []int{}
//}

//func twoSum(nums []int, target int) []int {
//
//	m := make(map[int]int, len(nums))
//	for k, num := range nums {
//		m[num] = k
//	}
//
//	for k, v := range nums {
//		diff := target-v
//		if m[diff] != 0 && m[diff] != k {
//			return []int{k, m[diff]}
//		}
//	}
//
//	return nil
//}
